package com.employment.dao;

import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.employment.entity.JobPosition;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 职位信息Mapper接口
 * 
 * @author Employment System
 * @since 1.0.0
 */
@Mapper
public interface JobPositionMapper extends BaseMapper<JobPosition> {

    /**
     * 分页查询职位列表
     *
     * @param page           分页参数
     * @param keyword        关键词
     * @param category       职位类别
     * @param city           城市
     * @param salaryMin      最低薪资
     * @param salaryMax      最高薪资
     * @param workExperience 工作经验
     * @param education      学历要求
     * @param workType       工作类型
     * @param status         状态
     * @return 职位分页列表
     */
    Page<JobPosition> selectJobPage(Page<JobPosition> page,
                                   @Param("keyword") String keyword,
                                   @Param("category") String category,
                                   @Param("city") String city,
                                   @Param("salaryMin") BigDecimal salaryMin,
                                   @Param("salaryMax") BigDecimal salaryMax,
                                   @Param("workExperience") String workExperience,
                                   @Param("education") String education,
                                   @Param("workType") Integer workType,
                                   @Param("status") Integer status);

    /**
     * 根据公司ID查询职位列表
     *
     * @param companyId 公司ID
     * @param status    状态
     * @return 职位列表
     */
    List<JobPosition> selectByCompanyId(@Param("companyId") Long companyId,
                                      @Param("status") Integer status);

    /**
     * 增加职位浏览次数
     *
     * @param jobId 职位ID
     * @return 更新结果
     */
    int increaseViewCount(@Param("jobId") Long jobId);

    /**
     * 增加职位申请次数
     *
     * @param jobId 职位ID
     * @return 更新结果
     */
    int increaseApplyCount(@Param("jobId") Long jobId);

    /**
     * 查询热门职位
     *
     * @param limit 限制数量
     * @return 热门职位列表
     */
    List<JobPosition> selectHotJobs(@Param("limit") Integer limit);

    /**
     * 根据用户求职意向推荐职位
     *
     * @param userId 用户ID
     * @param limit  限制数量
     * @return 推荐职位列表
     */
    List<JobPosition> selectRecommendJobs(@Param("userId") Long userId,
                                        @Param("limit") Integer limit);

    /**
     * 统计职位数据
     *
     * @return 统计数据
     */
    List<String> selectJobStats();
}